home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / namegen / src / main.c < prev    next >
C/C++ Source or Header  |  1994-06-01  |  4KB  |  101 lines

  1. /*****  名前ジェネレータ namegen    *****/
  2. /*****  main.c                      *****/
  3.  
  4.  
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include "namegen.h"
  9. #include "put.h"
  10.  
  11.  
  12. void main(int argc, char *argv[]){
  13.  
  14. /*  ・各ワードは読込順にwordbufに入れられ、                                 */
  15. /*    一杯になると次のwordbufが確保される。                                 */
  16. /*  ・このときそのワードを定義するフィールドfieldでは、                     */
  17. /*  ptrbuf[field].ptr[]にそのワードへのポインタが格納される               */
  18. /*  ・ptrbufは一杯になると新たに確保される                                  */
  19. /*  ・フィールドfieldのワードword (1<word<wordix_max[field]) は、           */
  20. /*   ptrbuf_base[field]が指すptrbufから                                    */
  21. /*    ptrbufのリストを(word / PTRBUF_MAX)回辿ったあと、                     */
  22. /*    ptrbuf->ptr[word % PTRBUF_MAX] にある                                 */
  23.  
  24.     Ptrbuf          *ptrbuf_base[FIELD_MAX];    /* 各フィールドの           */
  25.                                                 /* ptrbufベース             */
  26.     int             wordix_max[FIELD_MAX];      /* 各ワードのワードix最大   */
  27.     int             gen_prob[FIELD_MAX];        /* 各フィールドの出現確率   */
  28.     int             gen_num;                    /* 名前生成数               */
  29.     int             verbose_level;              /* 冗長モードレベル         */
  30.     int             i;
  31.     int             field_max;                  /* フィールド数             */
  32.  
  33.  
  34.     gen_num         = 1;                /* デフォルト生成数                 */
  35.     verbose_level   = 0;                /* デフォルト冗長モード             */
  36.  
  37.     for (i = 1 ; i < argc && (char)*argv[i] == '-' ; i ++){
  38.         switch ( (char)*(argv[i]+1)){
  39.             case 'n' :
  40.                 if (i < argc-1){
  41.                     gen_num = atoi(argv[i+1]);
  42.                     if (gen_num < 0){
  43.                         error(ERR_HELP,NULL);
  44.                     }
  45.                     i ++;
  46.                 }
  47.                 break;
  48.             case 'v' :
  49.                 if (i < argc-1){
  50.                     verbose_level = atoi(argv[i+1]);
  51.                     if (verbose_level < 0 || 2 < verbose_level){
  52.                         error(ERR_HELP, NULL);
  53.                     }
  54.                     i ++;
  55.                 }
  56.                 break;
  57.             default  :
  58.                 error(ERR_HELP, NULL);
  59.                 break;
  60.         }
  61.     }
  62.     if (i == argc){
  63.         error(ERR_HELP, NULL);
  64.     }
  65.     if (verbose_level > 0){
  66.         putstr("*****  Start Reading Namefile  *****\n", stderr);
  67.     }
  68.  
  69.     for ( ; i < argc ; i ++){               /*  ファイル読込                */
  70.         read_namefile(argv[i],
  71.                       ptrbuf_base,
  72.                       wordix_max,
  73.                       gen_prob,
  74.                       &field_max,
  75.                       verbose_level);
  76.     }
  77.  
  78.                         /* 生成確率>0でワード未定義のフィールドをチェック */
  79.     for (i = 1 ; i <= field_max ; i ++){
  80.         if (gen_prob[i] > 0 && wordix_max[i] == 0){
  81.             putstr("Field:", stderr);
  82.             putint(i, stderr);
  83.             putstr("\n", stderr);
  84.             error(ERR_UNDEF_WORD, NULL);
  85.         }
  86.     }
  87.  
  88.     if (verbose_level > 0){
  89.         putstr("*****  Finished Reading Namefile  *****\n\n", stderr);
  90.     }
  91.  
  92.     generate_name(ptrbuf_base,                  /* 名前生成                 */
  93.                   wordix_max,
  94.                   gen_prob,
  95.                   field_max,
  96.                   gen_num);
  97.  
  98. }
  99.  
  100.  
  101.